package com.dragon.codefx.constant;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;

/**
 * 数据表类型映射实体类类型
 * @author lsc
 * @date 2024/11/29 15:37
 **/
@Getter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public enum FieldTypeEnum {

    // 字符串类型
    VARCHAR("varchar", "string", "String", "字符串"),
    CHAR("char", "string", "String", "字符"),
    TEXT("text", "string", "String", "文本"),
    LONGTEXT("longtext", "string", "String", "长文本"),
    TINYTEXT("tinytext", "string", "String", "短文本"),

    // 数值类型
    INT("int", "number", "Integer", "整型"),
    BIGINT("bigint", "number", "Long", "长整型"),
    SMALLINT("smallint", "number", "Short", "短整型"),
    TINYINT("tinyint", "number", "Byte", "小整型"),
    MEDIUMINT("mediumint", "number", "Integer", "中整型"),
    DECIMAL("decimal", "number", "BigDecimal", "高精度小数"),
    NUMERIC("numeric", "number", "BigDecimal", "数值"),
    FLOAT("float", "number", "Float", "单精度浮点数"),
    DOUBLE("double", "number", "Double", "双精度浮点数"),

    // 布尔类型
    BOOLEAN("boolean", "boolean", "Boolean", "布尔型"),
    BOOL("bool", "boolean", "Boolean", "布尔型"),

    // 日期和时间类型
    DATE("date", "string", "LocalDate", "日期"),
    DATETIME("datetime", "string", "LocalDateTime", "日期时间"),
    TIMESTAMP("timestamp", "string", "LocalDateTime", "时间戳"),
    TIME("time", "string", "LocalTime", "时间"),
    YEAR("year", "number", "Integer", "年份"),

    // 二进制类型
    BINARY("binary", "string", "byte[]", "固定长度二进制"),
    VARBINARY("varbinary", "string", "byte[]", "可变长度二进制"),
    BLOB("blob", "string", "byte[]", "二进制大对象"),
    MEDIUMBLOB("mediumblob", "string", "byte[]", "中等大小二进制对象"),
    LONGBLOB("longblob", "string", "byte[]", "大二进制对象"),

    // JSON 类型（MySQL 和 PostgreSQL 支持）
    JSON("json", "string", "String", "JSON"),
    JSONB("jsonb", "string", "String", "二进制 JSON"),

    // UUID 类型
    UUID("uuid", "string", "String", "UUID"),

    // 二进制数据
    BYTEA("bytea", "string", "byte[]", "二进制数据（PostgreSQL）"),

    // 枚举类型
    ENUM("enum", "string", "String", "枚举"),

    // 其他
    SERIAL("serial", "number", "Integer", "自动增长整数（PostgreSQL）"),
    BIGSERIAL("bigserial", "number", "Long", "自动增长大整数（PostgreSQL）"),
    INTEGER("integer", "number", "Integer", "整数");
    private String fieldType;
    private String frontType;
    private String classType;
    private String desc;

    public static String getClassType(String fieldType) {
        for (FieldTypeEnum fieldTypeEnum : FieldTypeEnum.values()) {
            if (fieldTypeEnum.getFieldType().equalsIgnoreCase(fieldType)) {
                return fieldTypeEnum.getClassType();
            }
        }
        return null;
    }

    public static String getFrontType(String fieldType) {
        for (FieldTypeEnum fieldTypeEnum : FieldTypeEnum.values()) {
            if (fieldTypeEnum.getFieldType().equalsIgnoreCase(fieldType)) {
                return fieldTypeEnum.getFrontType();
            }
        }
        return null;
    }

}
